package br.com.documentos.controller;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import br.com.documentos.model.entity.Usuario;
import br.com.documentos.model.service.EmailUsuarioService;
import br.com.documentos.model.service.UsuarioService;
import br.com.documentos.model.util.CaptchaUtil;

@ManagedBean
public class UsuarioMB extends ManagerBeanBase {

	private static final long serialVersionUID = 1L;

	private Usuario usuario = new Usuario();
	
	private String senhaConfirmacao;

	private String captcha = CaptchaUtil.createHtml();//Gera HTML CAPTCHA
	
	@ManagedProperty("#{usuarioService}")
	private UsuarioService usuarioService;
	
	@ManagedProperty("#{emailUsuarioService}")
	private EmailUsuarioService emailUsuarioService;
	
	public void salvar(){
		try{
			if( ! CaptchaUtil.isValid(getRequest()) ){
				addError("Confirmação de imagem inválida.");
			}
			
			if( ! usuario.getSenha().equals(getSenhaConfirmacao()) ){
				addError("Confirmação de senha inválida.");
			}
			
			if( hasNoErrors() ){
				usuarioService.cadastrar(usuario);
				emailUsuarioService.enviarEmailAtivacaoConta(usuario, getUrlProjeto() );
			
				addInfo("Conta criada com sucesso! Um email de ativação foi enviado a sua caixa postal."); 
				
				usuario = new Usuario();
			}			
		}
		catch (Exception e) {
			addError("Erro no cadastro do usuário",e);
		}
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getSenhaConfirmacao() {
		return senhaConfirmacao;
	}

	public void setSenhaConfirmacao(String senhaConfirmacao) {
		this.senhaConfirmacao = senhaConfirmacao;
	}

	public void setUsuarioService(UsuarioService usuarioService) {
		this.usuarioService = usuarioService;
	}

	public String getCaptcha() {
		return captcha;
	}

	public void setCaptcha(String captcha) {
		this.captcha = captcha;
	}

	public UsuarioService getUsuarioService() {
		return usuarioService;
	}

	public EmailUsuarioService getEmailUsuarioService() {
		return emailUsuarioService;
	}

	public void setEmailUsuarioService(EmailUsuarioService emailUsuarioService) {
		this.emailUsuarioService = emailUsuarioService;
	}
	
}
